diff --git a/src/citymania/cm_commands_gui.cpp b/src/citymania/cm_commands_gui.cpp index 0204ecf865..3e9ddf8e14 100644 --- a/src/citymania/cm_commands_gui.cpp +++ b/src/citymania/cm_commands_gui.cpp @@ -157,6 +157,38 @@ enum LoginWindowQueryWidgets { LQW_ADMIN_PW }; +enum AdminCompanyButtonsWidgets { + WID_AC_CAPTION, + WID_C_COMPANY_EMPTY, + WID_C_COMPANY_LOCK, + WID_C_COMPANY_UNLOCK, + WID_C_COMPANY_NEWSTICKET, + WID_C_COMPANY_NEWSTICKET_COMP, + WID_C_COMPANY_RESET, + WID_C_COMPANY_RESET_SPEC, + WID_C_COMPANY_RESET_KICK, + WID_C_COMPANY_KNOWN, + WID_C_COMPANY_RESET_KNOWN, + WID_C_COMPANY_MOVE_PLAYER, + WID_C_RESET_COMPANY_TIMER_120, + WID_C_RESET_COMPANY_TIMER, + WID_C_RESET_COMPANY_TIMER_CANCEL, + WID_C_COMPANY_SUSPEND, + WID_C_COMPANY_UNSUSPEND, + WID_C_COMPANY_AWARNING, + WID_C_COMPANY_JOIN2, + WID_C_COMPANY_LEAVE, + WID_C_COMPANY_CANCEL, + WID_C_COMPANY_CAPTION, +}; + +enum AdminCompanyButtonsQueryWidgets { + WID_CQ_RESET_COMPANY_TIMER, + WID_CQ_COMPANY_NEWSTICKET, + WID_CQ_COMPANY_NEWSTICKET_COMP, + WID_CQ_COMPANY_MOVE_PLAYER, +}; + enum CommunityName { CITYMANIA, NICE, @@ -179,11 +211,14 @@ char _inilogindata[9][MAX_COMMUNITY_STRING_LEN]; void AccountLogin(CommunityName community); void IniReloadLogin(); +void ShowAdminCompanyButtons(int companyid = INVALID_COMPANY); bool novahost() { return _novahost; } +bool GetAdmin() { return _admin; } + // void strtomd5(char * buf, char * bufend, int length){ // MD5Hash digest; // Md5 checksum; @@ -209,7 +244,7 @@ bool novahost() { //ini login hadling -void IniLoginInitiate(){ +void IniInitiate(){ if(_inilogin != NULL) return; //it was already set _inilogin = new IniFile({CFG_LOGIN_KEY}); _inilogin->LoadFromDisk(CFG_FILE, BASE_DIR); @@ -256,10 +291,13 @@ void SetServerItem(const std::string &itemname, const std::string &value) { IniItem &item = group.GetOrCreateItem(itemname); item.SetValue(value); _inilogin->SaveToDisk(fmt::format("{}{}", _personal_dir, CFG_FILE)); - //IniReloadLogin(); } + + + + /** Commands toolbar window handler. */ /* struct CommandsToolbarWindow : Window { @@ -708,12 +746,6 @@ struct LoginWindow : Window { LoginWindow(WindowDesc *desc, WindowNumber window_number) : Window(desc) { if ((_community == 1) || (_community == 2) || (_community == 3)) this->InitNested(window_number); - //this->InitNested(window_number); - // if(_novahost || !_networking){ - // this->DisableWidget(LWW_NICE); - // this->DisableWidget(LWW_BTPRO); - // } - // if(!_novahost || !_networking) this->DisableWidget(LWW_NOVAPOLIS); //no need for citymania if (_community == 3) { @@ -762,7 +794,6 @@ struct LoginWindow : Window { } break; } - } } @@ -860,6 +891,168 @@ struct LoginWindow : Window { } }; +struct AdminCompanyButtonsWindow : Window { + AdminCompanyButtonsQueryWidgets query_widget; + //CompanyID company; + + AdminCompanyButtonsWindow(WindowDesc *desc, WindowNumber window_number) : Window(desc) { + + this->InitNested(window_number); + + /* disable not supported buttons for n-ice */ + if (GetServerItem(COMMUNITY) == "1") { + this->DisableWidget(WID_C_COMPANY_SUSPEND); + this->DisableWidget(WID_C_COMPANY_UNSUSPEND); + this->DisableWidget(WID_C_COMPANY_AWARNING); + } + } + + static void CWCompanyResetCallback(Window* w, bool confirmed) + { + if (confirmed) NetworkClientSendChatToServer(fmt::format("!resetcompany {}",w->window_number)); + } + + static void CWCompanyResetSpecCallback(Window* w, bool confirmed) + { + if (confirmed) NetworkClientSendChatToServer(fmt::format("!resetcompanyspec {}",w->window_number)); + } + + static void CWCompanyResetKickCallback(Window* w, bool confirmed) + { + if (confirmed) NetworkClientSendChatToServer(fmt::format("!resetcompanykick {}",w->window_number)); + } + + + virtual void OnClick(Point pt, int widget, int click_count) + { + if(!_networking) return; + int _company = this->window_number; + switch (widget) { + case WID_C_COMPANY_EMPTY: + NetworkClientSendChatToServer(fmt::format("!emptycompany {}",_company)); + MarkWholeScreenDirty(); + break; + case WID_C_COMPANY_RESET_KICK: + ShowQuery(STR_XI_RESET_COMP, STR_XI_RESET_KICK_SURE, this, CWCompanyResetKickCallback); + MarkWholeScreenDirty(); + break; + case WID_C_COMPANY_RESET_SPEC: + ShowQuery(STR_XI_RESET_COMP, STR_XI_RESET_SPEC_SURE, this, CWCompanyResetSpecCallback); + MarkWholeScreenDirty(); + break; + case WID_C_COMPANY_RESET: + ShowQuery(STR_XI_RESET_COMP, STR_XI_RESET_COMP_SURE, this, CWCompanyResetCallback); + MarkWholeScreenDirty(); + break; + case WID_C_RESET_COMPANY_TIMER: + this->query_widget = WID_CQ_RESET_COMPANY_TIMER; + SetDParam(0, _company); + ShowQueryString(STR_EMPTY, STR_XI_RESET_TIMER_VALUE, 25, this, CS_NUMERAL, QSF_NONE); + break; + case WID_C_RESET_COMPANY_TIMER_120: + NetworkClientSendChatToServer(fmt::format("!resetcompanytimer {} 120",_company)); + MarkWholeScreenDirty(); + break; + case WID_C_RESET_COMPANY_TIMER_CANCEL: + NetworkClientSendChatToServer(fmt::format("!cancelresetcompany {}",_company)); + break; + case WID_C_COMPANY_LOCK: + NetworkClientSendChatToServer(fmt::format("!lockcompany {}",_company)); + MarkWholeScreenDirty(); + break; + case WID_C_COMPANY_UNLOCK: + NetworkClientSendChatToServer(fmt::format("!unlockcompany {}",_company)); + MarkWholeScreenDirty(); + break; + case WID_C_COMPANY_KNOWN: + NetworkClientSendChatToServer(fmt::format("!known {}",_company)); + MarkWholeScreenDirty(); + break; + case WID_C_COMPANY_RESET_KNOWN: + NetworkClientSendChatToServer(fmt::format("!resetknown {}",_company)); + MarkWholeScreenDirty(); + break; + case WID_C_COMPANY_MOVE_PLAYER: + this->query_widget = WID_CQ_COMPANY_MOVE_PLAYER; + SetDParam(0, _company); + ShowQueryString(STR_EMPTY, STR_NETWORK_SERVER_LIST_PLAYER_NAME, 250, this, CS_ALPHANUMERAL, QSF_NONE); + break; + case WID_C_COMPANY_NEWSTICKET: + this->query_widget = WID_CQ_COMPANY_NEWSTICKET; + SetDParam(0, _company); + ShowQueryString(STR_EMPTY, STR_XI_PLAYER_NEWSTICKET, 250, this, CS_ALPHANUMERAL, QSF_NONE); + break; + case WID_C_COMPANY_NEWSTICKET_COMP: + this->query_widget = WID_CQ_COMPANY_NEWSTICKET_COMP; + SetDParam(0, _company); + ShowQueryString(STR_EMPTY, STR_XI_PLAYER_NEWSTICKET, 250, this, CS_ALPHANUMERAL, QSF_NONE); + break; + case WID_C_COMPANY_SUSPEND: + NetworkClientSendChatToServer(fmt::format("!suspend {}",_company)); + MarkWholeScreenDirty(); + break; + case WID_C_COMPANY_UNSUSPEND: + NetworkClientSendChatToServer(fmt::format("!unsuspend {}",_company)); + MarkWholeScreenDirty(); + break; + case WID_C_COMPANY_AWARNING: + NetworkClientSendChatToServer(fmt::format("!awarning {}",_company)); + MarkWholeScreenDirty(); + break; + case WID_C_COMPANY_JOIN2: + NetworkClientSendChatToServer(fmt::format("!move #{} {}",_network_own_client_id ,_company)); + MarkWholeScreenDirty(); + break; + case WID_C_COMPANY_LEAVE: + NetworkClientRequestMove(COMPANY_SPECTATOR); + break; + case WID_C_COMPANY_CANCEL: + this->Close(); + break; + } + } + + void SetStringParameters(WidgetID widget) const override + { + switch (widget) { + case WID_C_COMPANY_CAPTION: + SetDParam(0, this->window_number); + break; + } + } + + void OnQueryTextFinished(char *str) + { + if (str == NULL) return; + switch (this->query_widget) { + default: NOT_REACHED(); + + case WID_CQ_RESET_COMPANY_TIMER: + NetworkClientSendChatToServer(fmt::format("!resetcompanytimer {} {}",this->window_number,str)); + MarkWholeScreenDirty(); + break; + case WID_CQ_COMPANY_NEWSTICKET: { + std::string buffer = GetString(STR_COMPANY_NAME); + NetworkClientSendChatToServer(fmt::format("!news {}: {}", buffer, str)); + MarkWholeScreenDirty(); + break; + } + case WID_CQ_COMPANY_NEWSTICKET_COMP: { + std::string buffer = GetString(STR_COMPANY_NAME); + NetworkClientSendChatToServer(fmt::format("!news {} {}", this->window_number, str)); + MarkWholeScreenDirty(); + break; + } + case WID_CQ_COMPANY_MOVE_PLAYER: { + NetworkClientSendChatToServer(fmt::format("!move #{} {}",str, this->window_number)); + MarkWholeScreenDirty(); + break; + } + } + } + +}; + static const NWidgetPart _nested_login_window_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_GREY), @@ -957,11 +1150,43 @@ static const NWidgetPart _nested_admin_window_widgets[] = { EndContainer(), }; - - - - - +static const NWidgetPart _nested_admin_company_window_widgets[] = { + NWidget(NWID_HORIZONTAL), + NWidget(WWT_CLOSEBOX, COLOUR_GREY), + NWidget(WWT_CAPTION, COLOUR_RED, WID_C_COMPANY_CAPTION), SetDataTip(STR_XI_COMPANY_ADMIN_CAPTION, 0), + NWidget(WWT_STICKYBOX, COLOUR_GREY), + EndContainer(), + NWidget(WWT_PANEL, COLOUR_GREY), SetFill(0, 1), + NWidget(NWID_HORIZONTAL), + NWidget(NWID_SPACER), SetMinimalSize(5, 0), SetFill(1, 0), + NWidget(NWID_VERTICAL, NC_EQUALSIZE), SetPIP(5, 3, 5), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_C_COMPANY_LOCK), SetMinimalSize(10, 13), SetFill(1, 0), SetDataTip(STR_XI_LOCK, STR_XI_LOCK_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_C_COMPANY_UNLOCK), SetMinimalSize(10, 13), SetFill(1, 0), SetDataTip(STR_XI_UNLOCK, STR_XI_UNLOCK_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_C_COMPANY_KNOWN), SetMinimalSize(10, 13), SetFill(1, 0), SetDataTip(STR_XI_KNOWN, STR_XI_KNOWN_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_C_COMPANY_RESET_KNOWN), SetMinimalSize(10, 13), SetFill(1, 0), SetDataTip(STR_XI_RESET_KNOWN, STR_XI_RESET_KNOWN_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_C_COMPANY_MOVE_PLAYER), SetMinimalSize(10, 13), SetFill(1, 0), SetDataTip(STR_XI_MOVE_PLAYER_TO, STR_XI_MOVE_PLAYER_TO_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_C_COMPANY_NEWSTICKET_COMP), SetMinimalSize(10, 13), SetFill(1, 0), SetDataTip(STR_XI_COMPANY_NEWSTICKET_BUTTON_COMP, STR_XI_COMPANY_NEWSTICKET_BUTTON_COMP_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_C_COMPANY_SUSPEND), SetMinimalSize(10, 13), SetFill(1, 0), SetDataTip(STR_XI_SUSPEND, STR_XI_SUSPEND_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_C_COMPANY_UNSUSPEND), SetMinimalSize(10, 13), SetFill(1, 0), SetDataTip(STR_XI_UNSUSPEND, STR_XI_UNSUSPEND_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_C_COMPANY_JOIN2),SetMinimalSize(10, 13), SetFill(1, 0),SetDataTip(STR_XI_COMPANY_JOIN2, STR_XI_COMPANY_JOIN2_TOOLTIP), + EndContainer(), + NWidget(NWID_SPACER), SetMinimalSize(5, 0), SetFill(1, 0), + NWidget(NWID_VERTICAL, NC_EQUALSIZE), SetPIP(5, 3, 5), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_C_COMPANY_EMPTY), SetMinimalSize(10, 13), SetFill(1, 0), SetDataTip(STR_XI_EMPTY, STR_XI_EMPTY_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_C_COMPANY_RESET), SetMinimalSize(10, 13), SetFill(1, 0), SetDataTip(STR_XI_RESET, STR_XI_RESET_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_C_COMPANY_RESET_SPEC), SetMinimalSize(10, 13), SetFill(1, 0), SetDataTip(STR_XI_RESET_SPEC, STR_XI_RESET_SPEC_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_C_COMPANY_RESET_KICK), SetMinimalSize(10, 13), SetFill(1, 0), SetDataTip(STR_XI_RESET_KICK, STR_XI_RESET_KICK_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_C_RESET_COMPANY_TIMER_120), SetMinimalSize(10, 13), SetFill(1, 0), SetDataTip(STR_XI_RESET_TIMER_120, STR_XI_RESET_TIMER_120_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_C_RESET_COMPANY_TIMER), SetMinimalSize(10, 13), SetFill(1, 0), SetDataTip(STR_XI_RESET_TIMER, STR_XI_RESET_TIMER_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_C_RESET_COMPANY_TIMER_CANCEL), SetMinimalSize(10, 13), SetFill(1, 0), SetDataTip(STR_XI_RESET_TIMER_CANCEL, STR_XI_RESET_TIMER_CANCEL_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_C_COMPANY_AWARNING), SetMinimalSize(10, 13), SetFill(1, 0), SetDataTip(STR_XI_AWARNING, STR_XI_AWARNING_TOOLTIP), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_C_COMPANY_LEAVE),SetMinimalSize(10, 13), SetFill(1, 0),SetDataTip(STR_NETWORK_COMPANY_LIST_SPECTATE, STR_NETWORK_COMPANY_LIST_SPECTATE), + EndContainer(), + NWidget(NWID_SPACER), SetMinimalSize(5, 0), SetFill(1, 0), + EndContainer(), + NWidget(NWID_SPACER), SetMinimalSize(0, 5), SetFill(0, 1), + EndContainer(), +}; /* Identify the current community */ void CheckCommunity() { @@ -975,8 +1200,7 @@ void CheckCommunity() { SetServerItem(COMMUNITY, "2"); // GetCommunityServerListText(); } - } else if (_network_server_name.find("CityMania.org") != - std::string::npos) { + } else if (_network_server_name.find("CityMania.org") != std::string::npos) { if (GetServerItem(COMMUNITY) != "3") { SetServerItem(COMMUNITY, "3"); // GetCommunityServerListText(); @@ -992,7 +1216,7 @@ void CheckCommunity() { }; void CheckAdmin(){ - + IniInitiate(); if (GetLoginItem(ADMIN) == "1") _admin = true; }; @@ -1012,8 +1236,15 @@ static WindowDesc _admin_window_desc(__FILE__, __LINE__, std::begin(_nested_admin_window_widgets), std::end(_nested_admin_window_widgets) ); +static WindowDesc _admin_company_buttons_desc(__FILE__, __LINE__, + WDP_AUTO, NULL, 0, 0, + CM_WC_ADMIN_COMPANY_BUTTONS, WC_NONE, + WDF_CONSTRUCTION, + std::begin(_nested_admin_company_window_widgets), std::end(_nested_admin_company_window_widgets) +); + void ShowLoginWindow() { - IniLoginInitiate(); + IniInitiate(); CheckCommunity(); CheckAdmin(); CloseWindowByClass(CM_WC_LOGIN_WINDOW); @@ -1021,4 +1252,16 @@ void ShowLoginWindow() { else AllocateWindowDescFront(&_admin_window_desc, 0); }; +void ShowAdminCompanyButtons(int left, int top, int width, int company2) { + IniInitiate(); + CheckCommunity(); + if (!Company::IsValidID((CompanyID)(company2-1))) return; + Window *w; + CloseWindowById(CM_WC_ADMIN_COMPANY_BUTTONS, company2); + w = new AdminCompanyButtonsWindow(&_admin_company_buttons_desc, company2); + w->top = top; + w->left = left + width; + w->SetDirty(); +}; + } // namespace citymania diff --git a/src/citymania/cm_commands_gui.hpp b/src/citymania/cm_commands_gui.hpp index dc9331ae0c..a4e19d7aa9 100644 --- a/src/citymania/cm_commands_gui.hpp +++ b/src/citymania/cm_commands_gui.hpp @@ -5,7 +5,10 @@ namespace citymania { void ShowCommandsToolbar(); void ShowLoginWindow(); -void CheckCommunity(); +void CheckAdmin(); +void ShowAdminCompanyButtons(int left, int top, int width, int company2); + +bool GetAdmin(); } // namespace citymania diff --git a/src/company_gui.cpp b/src/company_gui.cpp index 2842f7e7dd..df972af4ad 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -49,6 +49,7 @@ #include "citymania/cm_hotkeys.hpp" #include "citymania/cm_main.hpp" +#include "citymania/cm_commands_gui.hpp" #include "safeguards.h" @@ -2196,6 +2197,10 @@ static constexpr NWidgetPart _nested_company_widgets[] = { NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_C_RELOCATE_HQ), SetDataTip(STR_COMPANY_VIEW_RELOCATE_HQ, STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS), NWidget(NWID_SPACER), EndContainer(), + /* Admin company buttons */ + NWidget(NWID_SELECTION, INVALID_COLOUR, CM_WID_C_SELECT_ADMINBUTTONS), + NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, CM_WID_C_ADMINBUTTONS), SetDataTip(STR_XI_COMPANY_ADMIN_BUTTON, STR_XI_COMPANY_ADMIN_BUTTON), + EndContainer(), EndContainer(), EndContainer(), @@ -2225,15 +2230,7 @@ static constexpr NWidgetPart _nested_company_widgets[] = { NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_C_COMPANY_PASSWORD), SetDataTip(STR_COMPANY_VIEW_PASSWORD, STR_COMPANY_VIEW_PASSWORD_TOOLTIP), NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_C_COMPANY_JOIN), SetDataTip(STR_COMPANY_VIEW_JOIN, STR_COMPANY_VIEW_JOIN_TOOLTIP), EndContainer(), - // NWidget(NWID_SELECTION, INVALID_COLOUR, WID_C_SELECT_MOD), - // NWidget(NWID_SPACER), SetMinimalSize(0, 0), SetFill(0, 1), - // NWidget(NWID_VERTICAL), SetPIP(4, 2, 4), - // NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_C_MOD_COMPANY_JOIN), SetFill(1, 0), SetDataTip(STR_MOD_COMPANY_JOIN_BUTTON, STR_NULL), - // NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_C_MOD_COMPANY_TOGGLE_LOCK), SetFill(1, 0), SetDataTip(STR_MOD_TOGGLE_LOCK_BUTTON, STR_NULL), - // NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_C_MOD_COMPANY_RESET), SetFill(1, 0), SetDataTip(STR_MOD_COMPANY_RESET_BUTTON, STR_NULL), - // EndContainer(), - // EndContainer(), - EndContainer(), + EndContainer(), EndContainer(), EndContainer(), EndContainer(), @@ -2257,14 +2254,6 @@ static const StringID _company_view_vehicle_count_strings[] = { /** * Window with general information about a company */ -static void ResetCallback(Window *w, bool confirmed) -{ - if (confirmed) { - CompanyID company2 = (CompanyID)w->window_number; - citymania::NetworkClientSendChatToServer(fmt::format("!reset {}", company2 + 1)); - } -} - struct CompanyWindow : Window { CompanyWidgets query_widget; @@ -2302,6 +2291,10 @@ struct CompanyWindow : Window /* Button bar selection. */ reinit |= this->GetWidget(WID_C_SELECT_BUTTONS)->SetDisplayedPlane(local ? 0 : SZSP_NONE); + /* Admin company buttons */ + citymania::CheckAdmin(); + reinit |= this->GetWidget(CM_WID_C_SELECT_ADMINBUTTONS)->SetDisplayedPlane(citymania::GetAdmin() ? 0 : SZSP_NONE); + /* Build HQ button handling. */ reinit |= this->GetWidget(WID_C_SELECT_VIEW_BUILD_HQ)->SetDisplayedPlane((local && c->location_of_HQ == INVALID_TILE) ? CWP_VB_BUILD : CWP_VB_VIEW); @@ -2325,13 +2318,6 @@ struct CompanyWindow : Window } } - // if(!_networking) { - // this->SetWidgetDisabledState(CW_WIDGET_COMPANY_RESUME, true); - // this->SetWidgetDisabledState(CW_WIDGET_COMPANY_SUSPEND, true); - // this->SetWidgetDisabledState(CW_WIDGET_COMPANY_RESET, true); - // this->SetWidgetDisabledState(CW_WIDGET_COMPANY_JOIN2, true); - // } - this->DrawWidgets(); } @@ -2389,19 +2375,13 @@ struct CompanyWindow : Window size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_GIVE_MONEY_BUTTON).width); size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_HOSTILE_TAKEOVER_BUTTON).width); size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_PASSWORD).width); - size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_JOIN).width); + size->width += padding.width; break; - // case CW_WIDGET_COMPANY_RESUME: - // case CW_WIDGET_COMPANY_SUSPEND: - // case CW_WIDGET_COMPANY_RESET: - // case CW_WIDGET_COMPANY_JOIN2: - // if(!_novarole){ - // size->width = 0; - // size->height = 0; - // } - // break; + case CM_WID_C_ADMINBUTTONS: + size->width = std::max(size->width, GetStringBoundingBox(STR_XI_COMPANY_ADMIN_BUTTON).width); + case WID_C_HAS_PASSWORD: if (_networking) *size = maxdim(*size, GetSpriteSize(SPR_LOCK)); break; @@ -2624,28 +2604,12 @@ struct CompanyWindow : Window MarkWholeScreenDirty(); break; } - - case WID_C_MOD_COMPANY_JOIN: { - if (!_novarole) return; - CompanyID company2 = (CompanyID)this->window_number; - // this->query_widget = WID_C_MOD_COMPANY_JOIN; - citymania::NetworkClientSendChatToServer(fmt::format("!move {}", company2 + 1)); - MarkWholeScreenDirty(); - break; - } - case WID_C_MOD_COMPANY_RESET: { - if (!_networking) return; - this->query_widget = WID_C_MOD_COMPANY_RESET; - ShowQuery(CM_STR_XI_RESET_CAPTION, CM_STR_XI_REALY_RESET, this, ResetCallback); - MarkWholeScreenDirty(); - break; - } - case WID_C_MOD_COMPANY_TOGGLE_LOCK: { - if (!_novarole) return; - CompanyID company2 = (CompanyID)this->window_number; - citymania::NetworkClientSendChatToServer(fmt::format("!lockp {}", company2 + 1)); - MarkWholeScreenDirty(); - break; + /* Admin company buttons */ + case CM_WID_C_ADMINBUTTONS: + { + CompanyID company2 = (CompanyID)this->window_number; + citymania::ShowAdminCompanyButtons(this->left, this->top, this->width, company2+1); + break; } } } diff --git a/src/lang/english.txt b/src/lang/english.txt index 1cde6a636b..4cf1b5273f 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -6322,3 +6322,50 @@ CM_STR_SHOW_HIDDEN_ENGINES_VEHICLE_TRAIN :{BLACK}Show CM_STR_SHOW_HIDDEN_ENGINES_VEHICLE_ROAD_VEHICLE :{BLACK}Show hidden ({NUM}) CM_STR_SHOW_HIDDEN_ENGINES_VEHICLE_SHIP :{BLACK}Show hidden ({NUM}) CM_STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT :{BLACK}Show hidden ({NUM}) + +### Admin Buttons ### +STR_XI_COMPANY_ADMIN_CAPTION :{WHITE}Admin buttons #{NUM} +STR_XI_COMPANY_ADMIN_BUTTON :{WHITE}Admin buttons +STR_XI_LOCK :{BLACK}Lock +STR_XI_LOCK_TOOLTIP :{BLACK}Lock Company. All players on it will be sent to spectators. +STR_XI_UNLOCK :{BLACK}Unlock +STR_XI_UNLOCK_TOOLTIP :{BLACK}Unlock Company making possible player(s) joining it again. +STR_XI_KNOWN :{BLACK}Known +STR_XI_KNOWN_TOOLTIP :{BLACK}Show the known player(s) of company. +STR_XI_RESET_KNOWN :{BLACK}Reset Known +STR_XI_RESET_KNOWN_TOOLTIP :{BLACK}Reset list of known players of company. +STR_XI_MOVE_PLAYER_TO :{BLACK}Move to ... +STR_XI_MOVE_PLAYER_TO_TOOLTIP :{BLACK}Move a player (number #.. or name) to company +STR_XI_COMPANY_NEWSTICKET_BUTTON :{BLACK}News +STR_XI_COMPANY_NEWSTICKET_BUTTON_TOOLTIP :{BLACK}Open a Newspapper message directed to Company +STR_XI_COMPANY_NEWSTICKET_BUTTON_COMP :{BLACK}News (P. C.) +STR_XI_COMPANY_NEWSTICKET_BUTTON_COMP_TOOLTIP :{BLACK}Open a Newspapper message only showed to Company +STR_XI_SUSPEND :{BLACK}Suspend +STR_XI_SUSPEND_TOOLTIP :{BLACK}Suspend Company actions keeping player in the company. +STR_XI_UNSUSPEND :{BLACK}Unsuspend +STR_XI_UNSUSPEND_TOOLTIP :{BLACK}Unsuspend Company actions. +STR_XI_EMPTY :{BLACK}Empty +STR_XI_EMPTY_TOOLTIP :{BLACK}Send players in company to Spectators. +STR_XI_RESET :{BLACK}Reset +STR_XI_RESET_TOOLTIP :{BLACK}Reset the company. The company must be empty. +STR_XI_RESET_SPEC :{BLACK}Reset Spec +STR_XI_RESET_SPEC_TOOLTIP :{BLACK}Reset company and send player(s) to spectators. +STR_XI_RESET_KICK :{BLACK}Reset Kick +STR_XI_RESET_KICK_TOOLTIP :{BLACK}Reset company and Kick out of the game player(s) on it. +STR_XI_RESET_TIMER_120 :{BLACK}Reset T. 2m +STR_XI_RESET_TIMER_120_TOOLTIP :{BLACK}Starts a timer to reset company when after 2 minutes countdown. +STR_XI_RESET_TIMER :{BLACK}Reset T.... +STR_XI_RESET_TIMER_TOOLTIP :{BLACK}Starts a timer to reset company when time expire (time is Admin input). +STR_XI_RESET_TIMER_VALUE :{BLACK}Time to Reset (seconds): +STR_XI_RESET_TIMER_CANCEL :{BLACK}Cancel Reset +STR_XI_RESET_TIMER_CANCEL_TOOLTIP :{BLACK}Cancel the Reset timer. +STR_XI_AWARNING :{BLACK}Warning +STR_XI_AWARNING_TOOLTIP :{BLACK}Sends a Warning to company that an admin is trying to contact. +STR_XI_RESET_COMP :{BLACK}RESET Company +STR_XI_RESET_COMP_SURE :{WHITE}Sure to RESET this company? +STR_XI_RESET_SPEC_SURE :{WHITE}Sure to RESET this company, send players to SPECTATORS? +STR_XI_RESET_KICK_SURE :{WHITE}Sure to RESET this company, and KICK players on it? +STR_XI_PLAYER_NEWSTICKET :{BLACK}Type message as newspapper ticket to this Player +STR_XI_COMPANY_NEWSTICKET :{BLACK}Type message as newspapper ticket to this Company +STR_XI_COMPANY_JOIN2 :{BLACK}A. Join +STR_XI_COMPANY_JOIN2_TOOLTIP :{BLACK}Join as an admin diff --git a/src/widgets/company_widget.h b/src/widgets/company_widget.h index 45295b63c8..ceec34c89c 100644 --- a/src/widgets/company_widget.h +++ b/src/widgets/company_widget.h @@ -52,11 +52,8 @@ enum CompanyWidgets : WidgetID { WID_C_COMPANY_PASSWORD, ///< Button to set company password. WID_C_COMPANY_JOIN, ///< Button to join company. - WID_C_SELECT_MOD, - WID_C_SELECT_MOD_JOIN, - WID_C_MOD_COMPANY_JOIN, - WID_C_MOD_COMPANY_RESET, - WID_C_MOD_COMPANY_TOGGLE_LOCK, + CM_WID_C_SELECT_ADMINBUTTONS, + CM_WID_C_ADMINBUTTONS, }; /** Widgets of the #CompanyFinancesWindow class. */ diff --git a/src/window_type.h b/src/window_type.h index 8e1269c5c7..42cdbd6313 100644 --- a/src/window_type.h +++ b/src/window_type.h @@ -732,6 +732,7 @@ enum WindowClass { CM_WC_COMMAND_TOOLBAR, CM_WC_LOGIN_WINDOW, CM_WC_CB_TOWN, + CM_WC_ADMIN_COMPANY_BUTTONS, WC_INVALID = 0xFFFF, ///< Invalid window. };